//
//  UITextField+TWTextField.m
//  BuDeJie
//
//  Created by 田伟 on 2017/2/1.
//  Copyright © 2017年 公司. All rights reserved.
//

#import "UITextField+TWTextField.h"
#import <objc/message.h>

@implementation UITextField (TWTextField)

- (void)setPlaceholderColor:(UIColor *)placeholderColor{

    // 给成员属性赋值，给系统的类添加成员属性，只有runtime能做
    // objc_setAssociatedObject添加成员属性：参数：给谁添加，成员变量的名称，成员变量的值，要保存的策略
    // 这句话的作用就是讲传递过来的颜色与我自定义的属性关联起来，或者叫将颜色保存在属性里面。
    objc_setAssociatedObject(self, @"placeholderColor", placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    // 获取占位文字控件
    UILabel * placeholderLabel = [self valueForKey:@"placeholderLabel"];
    // 设置占位文字颜色
    placeholderLabel.textColor = placeholderColor;
}

- (UIColor *)placeholderColor{
    // 拿到我保存在属性里面的颜色
    return objc_getAssociatedObject(self, @"placeholderColor");
}


// 此方法是只要设置了文本就自动在赋值一次颜色，给系统的方法添加额外的功能，需要使用交互
- (void)setTW_Placeholder:(NSString *)placeholder{
    // 调setTW_Placeholder等于调用setPlaceholder自己，加上下面这句代码：setTW_Placeholder等于调用系统的setPlaceholder。
    // 外面调用setPlaceholder就来到这个方法里面，在这个方法里面先调用了系统的setPlaceholder，再进行了下面的自动在赋值一次颜色
    [self setTW_Placeholder:placeholder];
//    self.placeholder = placeholder;这个方法被上面的代码调用，不用再写
    self.placeholderColor = self.placeholderColor;
}


+ (void)load{
    // 拿到setPlaceholder方法 Instance Method: 实例方法
    Method setPlaceholder = class_getInstanceMethod(self, @selector(setPlaceholder:));
    // 拿到setTW_Placeholder
    Method setTW_Placeholder = class_getInstanceMethod(self, @selector(setTW_Placeholder:));
    // 交互
    method_exchangeImplementations(setPlaceholder, setTW_Placeholder);
}
@end
